package monopoli.gui;

import java.util.ArrayList;
import java.util.Iterator;
import monopoli.Monopoli;


public class Tabellone {
    public  int zeroY = 640;
    public int step = 57;
    public int gap = 40;
    public  int zeroX = 631;
    public int sideX = 600;
    public int sideY = 591;
    private ArrayList<Pedina> pedine = new ArrayList();
    private ArrayList<Costruzione> costruzioni = new ArrayList();

    public int getStep() {
        return step;
    }

    public void setStep(int step) {
        this.step = step;
    }

    public ArrayList<Costruzione> getCostruzioni() {
        return costruzioni;
    }

    public void setCostruzioni(ArrayList<Costruzione> costruzioni) {
        this.costruzioni = costruzioni;
    }

    public ArrayList<Pedina> getPedine() {
        return pedine;
    }

    public void setPedine(ArrayList<Pedina> pedine) {
        this.pedine = pedine;
    }

    public int getZeroX() {
        return zeroX;
    }

    public void setZeroX(int zeroX) {
        this.zeroX = zeroX;
    }

    public int getZeroY() {
        return zeroY;
    }

    public void setZeroY(int zeroY) {
        this.zeroY = zeroY;
    }
    





    public Tabellone () {


        /*//PROVA
        pedine = new ArrayList();
        costruzioni = new ArrayList();
        Pedina p = new Pedina();
        p.setNome("mela");
        p.setPosX(zeroX);
        p.setPosY(zeroY);
        pedine.add(p);
        Casa c = new Casa();
        c.setPosX(zeroX - step + 15);
        c.setPosY(zeroY - 35);
        Albergo a = new Albergo();
        a.setPosX(zeroX - step - 15);
        a.setPosY(zeroY - 35);
        costruzioni.add(c);
        costruzioni.add(a);*/


    }

    public int getLato(int c) {
        if (c >= 0 && c < 10)
            return 1 ;
        else if(c >= 10 && c < 20)
            return 2;
        else if(c >= 20 && c < 30)
            return 3;
        else
            return 4;

    }

    public int casellaToPosX(int casella) {
        int nSide = getLato(casella);
        if(nSide == 1)
            return zeroX - (step * casella);
        if(nSide == 2)
            return zeroX - sideX;
        if(nSide == 3)
            /*if(casella == 20)
                return zeroX - sideX - 20;
            else*/
                return zeroX - ((30 - casella) * step) -10;
        if(nSide == 4)
            return zeroX + 20;
        else return 0;
    }

    public int casellaToPosY(int casella) {
        int nSide = getLato(casella);
        if(nSide == 1)
            return zeroY;
        if(nSide == 2)
            return (zeroY  - sideY) + (step * (20 - casella));
        if(nSide == 3)
            return zeroY - sideY - 20;
        if(nSide == 4)
            return (zeroY - sideY) + ((casella - 30) * step) ;
        else
            return 0;

    }

    void aggiungiCasa(int casella) {
        casella--;
        int x=0;
        int y=0;
        int nSide = getLato(casella);
        Casa c = new Casa();
        if(nSide==1) {
        x = casellaToPosX(casella);
        y = casellaToPosY(casella) - gap;   
        }
        if(nSide==2) {
        x = casellaToPosX(casella) + gap;
        y = casellaToPosY(casella);
        }
        if(nSide==3) {
        x = casellaToPosX(casella);
        y = casellaToPosY(casella) + gap;
        }
        if(nSide==4) {
        x = casellaToPosX(casella) - gap;
        y = casellaToPosY(casella);
        }
        c.setPosX(x);
        c.setPosY(y);
        costruzioni.add(c);
        Monopoli.getMonopoliGUI().debugMessage("Aggiunta casa coordinate : X " + x + ". Y " + y +".");
        Monopoli.getMonopoliGUI().AggiornaTabellone();
    }

    void aggiungiHotel(int casella) {
        casella--;
        Albergo c = new Albergo();
        int x=0;
        int y=0;
        int nSide = getLato(casella);

        if(nSide==1) {
        x = casellaToPosX(casella);
        y = casellaToPosY(casella) - gap;
        }
        if(nSide==2) {
        x = casellaToPosX(casella) + gap;
        y = casellaToPosY(casella);
        }
        if(nSide==3) {
        x = casellaToPosX(casella);
        y = casellaToPosY(casella) + gap;
        }
        if(nSide==4) {
        x = casellaToPosX(casella) - gap;
        y = casellaToPosY(casella);
        }
        c.setPosX(x);
        c.setPosY(y);
        costruzioni.add(c);
        Monopoli.getMonopoliGUI().debugMessage("Aggiunta casa coordinate : X " + x + ". Y " + y +".");
        Monopoli.getMonopoliGUI().AggiornaTabellone();
    }

    void aggiungiPedina(int casella,String s) {
        int count=0;
        //controllo quante pedine ci sono sulla casella
        Iterator it = pedine.iterator();
        while(it.hasNext()) {
            Pedina p = (Pedina) it.next();
            if(p.getCasella() == casella)
                count++;
        }
        Pedina p = new Pedina();
        if(count==0) {
            p.setPosX(casellaToPosX(casella));
            p.setPosY(casellaToPosY(casella));
        }
        if(count==1) {
            p.setPosX(casellaToPosX(casella) + 20);
            p.setPosY(casellaToPosY(casella));}
        if(count==2) {
            p.setPosX(casellaToPosX(casella) - 20);
            p.setPosY(casellaToPosY(casella));}
        if(count==3) {
            p.setPosX(casellaToPosX(casella));
            p.setPosY(casellaToPosY(casella) - 30);}
        if(count==4) {
            p.setPosX(casellaToPosX(casella) - 20);
            p.setPosY(casellaToPosY(casella) - 30);}
        if(count==5) {
            p.setPosX(casellaToPosX(casella) -20);
            p.setPosY(casellaToPosY(casella) +30);}

        p.setNome(s);
        pedine.add(p);
        Monopoli.getMonopoliGUI().AggiornaTabellone();
    }

    void muoviPedina(String nome, int casella) {
        //trovo la pedina

        Pedina p=null;
        Iterator it = pedine.iterator();
        boolean stop = false;
        while(it.hasNext() && stop == false) {
            p = (Pedina) it.next();
            if((p.getNome().compareTo(nome)) == 0)
                stop = true;
        }
        p.setCasella(casella);
        int posX = casellaToPosX(casella);
        int posY = casellaToPosY(casella);
        p.setPosX(posX);
        p.setPosY(posY);

        Monopoli.getMonopoliGUI().AggiornaTabellone();
        Monopoli.getMonopoliGUI().debugMessage("Muovi pedina : X " + posX + ". Y " + posY +".");

    }

    void rimuoviCasa(int casella) {
        casella--;
        Costruzione c=null;
        Casa a = null;
        int x,y;
        int nSide;
        boolean stop = false;
        Iterator it = costruzioni.iterator();
        while(it.hasNext() && stop==false) {
            c=(Costruzione)it.next();
            if(c instanceof Casa) {
                x=c.getPosX();
                y=c.getPosY();
                nSide = getLato(casella);
                if(nSide==1 && x == casellaToPosX(casella) && y == (casellaToPosY(casella) - gap))
                    stop=true;
                else if(nSide==2 && x == (casellaToPosX(casella) + gap) && y == (casellaToPosY(casella)))
                    stop=true;
                else if(nSide==3 && x == (casellaToPosX(casella)) && y == (casellaToPosY(casella) + gap))
                    stop=true;
                else if(nSide==4 && x == (casellaToPosX(casella) - gap) && y == (casellaToPosY(casella)))
                    stop=true;
                else
                    stop=false;

            }
           }
        if(stop=true) {
            costruzioni.remove(c);

        }
        Monopoli.getMonopoliGUI().AggiornaTabellone();
    }

    void rimuoviHotel(int casella) {
        casella--;
        Costruzione c=null;
        Albergo a = null;
        int x,y;
        int nSide;
        boolean stop = false;
        Iterator it = costruzioni.iterator();
        while(it.hasNext() && stop==false) {
            c=(Costruzione)it.next();
            if(c instanceof Albergo) {
                x=c.getPosX();
                y=c.getPosY();
                nSide = getLato(casella);
                if(nSide==1 && x == casellaToPosX(casella) && y == (casellaToPosY(casella) - gap))
                    stop=true;
                else if(nSide==2 && x == (casellaToPosX(casella) + gap) && y == (casellaToPosY(casella)))
                    stop=true;
                else if(nSide==3 && x == (casellaToPosX(casella)) && y == (casellaToPosY(casella) + gap))
                    stop=true;
                else if(nSide==4 && x == (casellaToPosX(casella) - gap) && y == (casellaToPosY(casella)))
                    stop=true;
                else
                    stop=false;

            }
           }
        if(stop=true) {
            costruzioni.remove(c);
        }
        Monopoli.getMonopoliGUI().AggiornaTabellone();
    }

    void rimuoviPedina(String nome) {
        Pedina p=null;
        Iterator it = pedine.iterator();
        boolean stop = false;
        while(it.hasNext() && stop == false) {
            p = (Pedina) it.next();
            if((p.getNome().compareTo(nome)) == 0)
                stop = true;
        }
        pedine.remove(p);
        p.getLbl().setVisible(false);
        Monopoli.getMonopoliGUI().AggiornaTabellone();
    }
 
}

